package org.ekingstar.qd.service;

import java.util.List;

import org.ekingstar.qd.domain.QdDomain;
import com.ekingstar.framework.util.Page;

/**
 * 主题业务处理接口
 * @author 
 */
public interface CDomainService{

	//返回所有主题信息
	public List<QdDomain> getDomainList();
	
	/**
	 * @descripte 根据主题类别，查询所有主题类别下的主题 
	 * @param strCatalogId 主题类别ID号
	 * @return QdDomain
	 */
	public List<QdDomain> getDomainList(String strCatalogId);
	
	
	/**
	 * @descripte 根据主题类别和主题名称查询主题
	 * @param strCatalogId 主题类别ID号
	 * @param strKeyWord   主题名称
	 * @return QdDomain
	 */
	public List<QdDomain> getDomainList(String strCatalogId,String strKeyWord);
	
	
	/**
	 * @descripte 根据主题分类和主题审核状态显示主题信息
	 * @param  strCatalogId 主题类别ID号
	 * @param  nFlag        审核状态
	 * @return QdDomain
	 */
	public List<QdDomain> getDomainList(String strCatalogId,int nFlag);
	
	
	/**
	 * @descripte 根据主题ID号获取主题信息 
	 * @param strDomainId 主题类别ID号
	 * @return QdDomain
	 */
	public QdDomain getDomain(String strDomainId);
	
	
	/**
	 * @descripte 批量移动主题信息。
	 *    若目标分类与源分类相同，则给出提示，不予移动。
	 *    批量移动前先给出提示，若确定移动，则将选定的主题批量移动至目标分类。
	 *    若目标分类中已存在同名的主题，则同名主题将被忽略，不予移动，其他主题继续移动，移动后给出信息提示，信息内容包括成功移动主题数，忽略的主题数
	 * @param  strDomainId   被移动的主题ID集
	 * @param  strCatalogId  主题移至目标主题分类ID号
	 * @return String  成功移动主题数,忽略的主题数
	 */
	public String moveDomain(String[] strDomainId,String strCatalogId);
	
	
	/**
	 * @descripte 根据主题类别ID和主题名称，判断是否已经存在相同主题名称的主题，有返回1，否则返回-1
	 * @param  strName       主题名称
	 * @param  strCatalogId  主题分类ID号
	 * @return int
	 */
	public int isExistsDomainByName(String strName,String strCatalogId);
	
	
	/**
	 * @descripte 批量删除主题及其主题配置和授权信息，删除成功返回1否则返回-1
	 * @param  strDomainId   被删除主题信息ID集
	 * @return int
	 */
	public int delDomain(String[] strDomainId);
	
	
	/**
	 * @descripte 批量审核主题，成功返回1否则返回-1
	 * @param  strDomainId   被审核主题信息ID集
	 * @param  nFlag         审核状态 
	 * @return int
	 */
	public int setDomainFlag(String[] strDomainId,int nFlag);
	
	

	/**
	 * @descripte 批量显示和隐藏主题，成功返回1否则返回-1
	 * @param  strDomainId   被审核主题信息ID集
	 * @param  nFlag         显示状态 
	 * @return int
	 */
	public int setDomainDisplay(String[] strDomainId,int nFlag);
	
	
	/**
	 * @descripte 新增主题信息，新增成功返回1，否则返回-1
	 * @param  strName      主题名称
	 * @param  strDescript  主题描述
	 * @param  strCatalogId 主题所属分类ID号       
	 * @return int
	 */
	public int addDomain(String strName,String strDescript,String strCatalogId);


	/**
	 * @descripte 根据主题ID号，修改主题信息，修改成功返回1，否则返回-1
	 * @param  strDomainId  被修改主题的ID号
	 * @param  strName      主题名称
	 * @param  strDescript  主题描述        
	 * @return int
	 */
	public int updateDomain(String strDomainId,String strName,String strDescript);
	
	
	/**
	 * @descripte 复制主题，将源主题的表和关系定义、查询字段、主题过滤条件等信息复制至新建主题，复制成功返回1，否则返回-1
	 * @param  soureDomainId  被复制主题的ID号
	 * @param  strName        主题名称
	 * @param  strDescript    主题描述 
	 * @param  strCatalogId   主题所属分类ID号       
	 * @return int
	 */
	public int copyDomain(String soureDomainId,String strName,String strDescript,String strCatalogId);
	
	
	/**
	 * @descripte 根据主题ID号，删除主题及其主题配置和授权信息，删除成功返回1否则返回-1
	 * @param  strDomainId  被删主题的ID号       
	 * @return int
	 */
	public int delDomain(String strDomainId);
	
	
	/**
	 * @descripte 获取主题配置的查询SQL语句
	 * @param  strDomainId  主题ID号       
	 * @return String
	 */
	public String getSQL(String strDomainId);
	
	
	/**
	 * @descripte 获取主题配置结果数据
	 * @param  strDomainId  主题ID号       
	 * @return List
	 */
	public List getData(String strDomainId);
	
	/**
	 * @descripte 获取主题访问的URL
	 * @param  strDomainId  主题ID号       
	 * @return String
	 */
	public String getUrl(String strDomainId);
	
	/**
	 * @descripte 测试SQL语句 成功返回1，否则返回-1
	 * @param  strSql  SQL语句       
	 * @return int 
	 */
	public int testSql(String strSql);
	
	
	/**
	 * @descripte 校验SQL语句 成功返回true，否则返回错误信息代码
	 * @param  strSql  SQL语句       
	 * @return String[]  String[0]  true 成功 false 失败
	 *                   String[1]  String[0]=true时为空，String[0]=false时为错误信息
	 */
	public String[] CheckSql(String strSql);
	
	
	/**
	 * @descript 查询主题信息
	 * @param qdDomain 主题查询条件
	 * @param pageNo  页面
	 * @param pageSize 每页显示记录数
	 * @return Page
	 */
	public Page getQdDomainList(QdDomain qdDomain, int pageNo, int pageSize);
	
}
